package com.litice.common.server.dao;

import com.litice.common.server.bean.Employee;
import org.jeecgframework.minidao.annotation.*;
import org.jeecgframework.minidao.pojo.MiniDaoPage;

import java.util.List;
import java.util.Map;

@MiniDao
public interface MIniDemoDao {
    /**
     * 查询返回Java对象
     * @param id
     * @return
     */
    @Sql("select * from employee where id = :id")
    Employee get(@Param("id") String id);

    /**
     * 查询返回Java对象
     * @deprecated SQL中采用freemarker语法取值,注意需要手工加上单引号（这种写法有SQL注入风险）
     * @param id
     * @return
     */
    @Sql("select * from employee where id = '${id}'")
    Employee getF(@Param("id") String id);

    /**
     * 修改数据
     * @param employee
     * @return
     */
    int update(@Param("employee") Employee employee);

    /**
     * 插入数据
     * @param employee
     */
    void insert(@Param("employee") Employee employee);

    /**
     * 插入数据（ID采用自增策略，并返回自增ID）
     * @param employee
     */
    @IdAutoGenerator(generator="native")
    int insertNative(@Param("employee") Employee employee);

    /**
     * 通用分页方法，支持（oracle、mysql、SqlServer、postgresql）
     * @param employee
     * @param page
     * @param rows
     * @return
     */
    @ResultType(Employee.class)
    public MiniDaoPage<Employee> getAll(@Param("employee") Employee employee, @Param("page")  int page, @Param("rows") int rows);

    /**
     * 自定义分页
     * @param employee
     * @param startRow  开始序号
     * @param pageSize  每页显示条数
     * @return
     */
    @ResultType(Employee.class)
    @Sql("select * from employee order by id asc limit :startRow,:pageSize")
    public List<Employee> getPageList(@Param("employee") Employee employee, @Param("startRow")  int startRow, @Param("pageSize") int pageSize);

    /**
     * 删除数据
     */
    @Sql("delete from employee where id = :id")
    public void delete(@Param("id") String id);

    /**
     * 返回List<Map>类型，全部数据
     * @param employee
     * @return
     */
    @Arguments({ "employee"})
    @Sql("select * from employee")
    List<Map<String,Object>> getAll(Employee employee);

    /**
     * 返回Map类型，支持多个参数
     * @param empno
     * @param name
     * @return
     */
    @Sql("select * from employee where empno = :empno and  name = :name")
    Map<String,Object> getMap(@Param("empno") String empno, @Param("name")String name);

    /**
     * 查询分页数量
     * @return
     */
    @Sql("select count(*) from employee")
    Integer getCount();

}
